PRINTF

            
#include <stdio.h>
int printf (format-string [, argument...]);
char *format-string;       строка управления форматом.

Описание.
Функция printf форматирует и печатает наборы символов и значений в выходной стандартный поток stdout . Строка формата состоит из обычных символов, escape-последовательностей и, если за строкой формата следуют аргументы, еще и спецификации формата. Обычные символы и escape-последовательности просто копируются в stdout в порядке их появления.
Например, строка

            printf ("Line one\n\t\tLine two\n");

выработает на выводе

            
            Line one
                            Line two.

Если за строкой формата следуют аргументы arguments, то эта строка также должна содержать спецификации формата, определяющие формат вывода этих аргументов. Спецификация формата всегда начинается с символа знака процента (%). Ниже о нем описывается подробнее.
Строка формата читается слева направо. Когда встречается первая спецификация формата (если она есть), то значение первого аргумента после строки формата преобразовывается и выводится согласно заданной спецификации. Вторая спецификация формата вызывает преобразование и вывод второго аргумента и так далее, до конца строки формата. Если аргументов больше, чем спецификаций формата, то эти дополнительные аргументы игнорируются. Результат является неопределенным, если аргументов недостаточно для всех спецификаций формата.
Спецификация формата имеет следующую форму:

            %х[flags][wigth][.precision][{F:N:h:I}]type.
            

Каждое поле в спецификации формата является отдельным символом или числом, выражающим отдельную опцию формата. Символ type , появляющийся после последнего необязательного поля формата, определяет аргумент как символ, строку или число.
Простейшая спецификация формата содержит только символ знака процента и символ типа (например, %S). Необязательные поля управляют другими аспектами форматирования, как описывается ниже.

                                                           
            ПОЛЕ                      ОПИСАНИЕ
            
            flags          Включение   вывода  и  печати   знаков,
                           пробелов,       десятичных       точек,
                           восьмеричных     и    шестнадцатеричных
                           префиксов. (См. табл. R.2.).
                           
            width          Минимальное число выводимых символов.

            precision      Максимальное число символов, печатаемых
                           на  всем  или  части  поля  вывода; или
                           минимальное  число   цифр   для  печати
                           целых значений. (См. табл. R.3.).
                           
            F, N           Префиксы, позволяющие пользователю over-
                           ride,  по умолчанию,  адресацию соглаше-
                           ний моделей памяти.
                           
            F              Используется для малой модели для печати
                           значения, объявленного far.
                                     
            N              Используется   для   средней, большой  и
                           huge-моделей  для near-значений.
                           
                           F  и N могут быть использованы только с
                           типами символов s и  p,  поскольку  они
                           уместны     только    с    аргументами,
                           представляющими указатель.
                           
            h, l           Предполагаемый размер аргумента:
                           
                           h используется в  качестве  префикса  с
                           целыми   типами  d,  i,  o,  x,  X  для
                           определения,  что   аргумент   является
                           short int.
                           
                           l  используется  в  качестве префикса с
                           типами d, i, o, x, X  для  обозначения,
                           что  аргумент является long int. Символ
                           l  используется  также  как  префикс  с
                           типами  e,  E, f, g, G для определения,
                           что  аргумент  является  скорее double,
                           чем float.
            

Если за символом знака процента (%) следует символ, не обозначающий тип формата, то этот символ копируется в поток stdout . Например, для печати символа знака процента используется комбинация %%.
Типы символов функции printf

               
            СИМВОЛ    ТИП АРГУМЕНТА          ФОРМАТ ВЫВОДА
            
              d         целый           целочисленный   десятичный
                                        знаковый
            
              i         целый           целочисленный   десятичный
                                        знаковый
            
              u         целый           беззнаковый  целочисленный
                                        десятичный
            
              o         целый           беззнаковый   восьмеричный
                                        целый
            
              x         целый           беззнаковый   шестнадцате-
                                        ричный целый, использующий
                                        "abcdef"
            
              X         целый           беззнаковый   шестнадцате-
                                        ричный целый, использующий
                                        "ABCDEF".
            
              f       с  плавающей      знаковое значение, имеющее
                      точкой            форму  [-]dddd.dddd,   где
                                        dddd  -  одна   или  более
                                        десятичных  цифр.    Коли-
                                        чество      цифр     перед
                                        десятичной точкой  зависит
                                        от   величины   числа,   а
                                        количество   цифр    после
                                        десятичной  точки  зависит
                                        от требуемой точности.
            
             e        с плавающей       знаковое значение, имеющее
                      точкой            форму [-]d.dddde[sign]ddd,
                                        где  d - десятичная цифра,
                                        dddd  -  одна  или   более
                                        десятичныхя  цифр,  ddd  -
                                        ровно    три    десятичных
                                        цифры,  и sign - либо "+",
                                        либо "-".
            
             E        с плавающей       идентично формату "e",  за
                      точкой            исключением   того,    что
                                        вместо "e" вводится "E".
            
             g        с плавающей       знаковое значение, распеча-
                      точкой            тываемое в формате "f" или
                                        "e",  и  являющееся  более
                                        компактным  для  выбранных
                                        значения  и точности  (как
                                        показано ниже). Формат "e"
                                        используется, только когда
                                        значение экспоненты меньше
                                        -4    или    больше,   чем
                                        precision.  Ведущие   нули
                                        отсекаются,  и  десятичная
                                        точка  появляется   тогда,
                                        когда  за ней следует одна
                                        или несколько цифр.
            
             G       с плавающей        идентично  формату "g", за
                     точкой             исключением    того,   что
                                        вместо     "e"    вводится
                                        экспонента "E"  (если  она
                                        необходима).
            
             c       символьный         отдельный символ.
            
             s       строковый          символы    печатаются   до
                                        первого  нулевого  символа
                                        '\o'   или  до  достижения
                                        precision.
            
             n       указатель на       число   символов   успешно
                     целый              записывается   в     поток
                                        stream;    это    значение
                                        хранится  в  целом,  адрес
                                        которого   выбирается  как
                                        аргумент.

             p       far-указатель      печать адреса, указываемо-
                                        го аргументом,  в    форме
                                        xxxx:yyyy,    где     xxxx
                                        является  сегментом,  yyyy
                                        является разветвлением,  а
                                        цифры   x   и  y  являются
                                        шестнадцатеричными цифрами
                                        верхнего  регистра (upper-
                                        case). %Np печатает только
                                        адрес  разветвления  yyyy.
                                        Поскольку  %p предполагает
                                        указатель на far-значение,
                                        аргументы      p-указателя
                                        могут быть сброшены к  far
                                        в    маленьких     моделях
                                        программ.
               
               

Символы flags функции printf

            
            FLAG(*)        ЗНАЧЕНИЕ                  ПО УМОЛЧАНИЮ
            
              -      Смещение результата влево    Смещение  вправо
                     внутри поля wigth
            
           
              +      Присоединение   знака   к    Знак  "-"  появ-
                     выводимому значению, если    ляется    только
                     оно имеет знаковый тип       для  отрицатель-
                                                  ных     знаковых
                                                  значений
                                                  
            blank    К выводимому значению при-   Без пробела
            (' ')    соединяется ' ', если  вы-
                     водимое значение  является
                     знаковым и  положительным;
                     флаг  "+"  override   флаг
                     blank,  если  оба  есть, и
                     положительное     знаковое
                     значение выводится  вместе
                     со знаком
                     
            #        При использовании с форма-   Без префикса
                     тами o, x, X,  флаг # при-
                     соединяет к любому ненуле-
                     вому  выводимому значению,
                     соответственно, 0, 0х, 0Х
                     
                     Когда флаг #  используется   Десятичная точ-
                     в  формате  e,  E,  f,  он   ка   появляется
                     определяет   наличие деся-   только   тогда,
                     тичной  точки в  выводимом   когда   за  ней
                     значении                     идут цифры
                     
                     Когда флаг #  используется   Десятичная точ-
                     в формате g, G, он опреде-   ка   появляется
                     ляет  наличие   десятичной   только   тогда,
                     точки в выводимом значении   когда   за  ней
                     и  препятствует  отсечению   идут цифры
                     ведущих нулей                Ведущие    нули
                                                  отсекаются
                                                  
                     Флаг  # игнорируется,  при
                     его использовании в форма-
                     тах c, d, i, u, s
                     

Примечание.
В формате спецификации может содержаться более, чем один flag.
Width неотрицательное десятичное целое, контролирующее минимальное число напечатанных символов. Если число символов в значении вывода меньше, чем в width , слева и справа добавляются пробелы (в зависимости от того, где определен флаг "-"), пока минимальная ширина не будет достигнута. Если к width присоединяется 0, то 0 будут добавляться до тех пор, пока не будет достигнут минимум width . (Это не применяется для чисел, смещенных влево).
Спецификация widt h не требует отсечения значения; если число символов выводимого значения больше чем определено в width , или не задано в нем, все значения символов распечатываются (под лежат спецификации precision ).
В спецификации width может быть звездочка (*), когда вместо значения подставляется соответствующий ему аргумент из списка ар гументов. Аргумент width должен предшедствовать соответствующему значению.
Спецификация precision является неотрицательным десятичным целым, которому предшествует точка (.), определяющая количество печатаемых символов или же число десятичных мест.
В отличии от спецификации width , спецификация precision требует отсечения выводимого значения или, в случае значения с плавающей точкой, его округления. В случае подстановки аргумента из списка аргументов в спецификации precision может быть звездочка (*). В списке аргументов аргумент precision предшествует форматируемому значению. Объяснение значений precision , в зависимости от типа type и случая, когда precision пропущено, представлено в таблице ниже.
Как тип type влияет на значение precision в функции printf

               
            ТИП             ЗНАЧЕНИЕ                ПО УМОЛЧАНИЮ

             d     Precision         определяет   Если   precision
             i     минимальное число печатаемых   равна 0 или про-
             u     цифр.  Если  число  цифр   в   пущена, или если
             o     аргументе     меньше,    чем   появляется точка
             x     размер   precision,    слева   (.)  без  идущих
             X     перед   выводимым  значением   за ней цифр,  то
                   добавляются нули. Если число   precision  уста-
                   цифр  не  превосходит размер   навливается рав-
                   precision,    значение    не   ной 1
                   отсекается
                                                  
             e     Precision  определяет  число   Precision     по
             E     цифр,    печатаемых    после   умолчанию  равна
             f     десятичной  точки. Последняя   6; если она рав-
                   печатаемая цифра округляется   на  0  или перед
                                                  ней   появляется
                                                  точка   (.)  без
                                                  следуемых за ней
                                                  цифр,      тогда
                                                  десятичная точка
                                                  не печатается
                                                  
             g     Precision         определяет   Печатаются   все
             G     максимальное   число  важных   важные   (много-
                   (многозначных)    печатаемых   значные) цифры
                   символов
                   
             c     Не    происходит    никакого   Печать символа
                   действия
            
             s     Precision определяет макси-    Печать символов,
                   мальное число печатаемых       пока  не  встре-
                   символов                       тится    нулевой
                   Символы,  превышающие размер   символ
                   precision, не печатаются
            

Возвращаемое значение.
Эта функция возвращает количество напечатанных символов.

Пример:

            main ()
      
         /* форматирование и печать различных данных */
            
            {
            char ch = 'h', *string = "computer";
            int count = 234, *ptr, hex = 0x10, oct = 010, dec = 10;
            double fp = 251.7366;
            
            printf("%d  %+d  %06d  %X  %x  %o\n\n",
                  count, count, count, count, count, count);
            
            printf("1234567890123%n45678901234567890\n\n", &count);
            printf("Value of count should be 13; count = %d\n\n",
                   count);
            
            printf("%10c%5c\n\n", ch, ch);
            
            printf("%25s\n%25.4s\n\n", string, string);
            
            printf("%f  %.2f  %e  %E\n\n", fp, fp, fp, fp);
            
            printf("%i  %i  %i\n\n", hex, oct, dec);
            
            ptr = &count;
            printf("%Np  %p  %Fp\n",
                   ptr, (int far *) ptr, (int far *)ptr);
            }
            

Тогда на выводе получится следующее:

            234  +234  000234   EA  ea  352
            
            123456789012345678901234567890
            
                            
            Value of count should be 13; count = 13;
                h    h
                      computer
                               comp
            
            251.736600    251.74   2.517366e+002   2.517366E+002
            
            16  8  10
            
            127A  1328:127A   1328:127A.
            
Hosted by uCoz